home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 July: Mac OS SDK / Dev.CD Jul 00 SDK2.toast / Development Kits / Hardware / Mac OS USB DDK / Mac OS USB DDK 1.4.1 / USB Software Locator Kit / SampleDriverInstallerExample / SampleDriverHeader.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-04-25  |  5.1 KB  |  192 lines  |  [TEXT/CWIE]

  1. /*
  2.     File:        SampleDriverHeader.c
  3.  
  4.     Contains:    Anchor Driver Header file
  5.  
  6.     Version:    xxx put version here xxx
  7.  
  8.     Copyright:    © 1997-1998 by Apple Computer, Inc., all rights reserved.
  9.  
  10.     File Ownership:
  11.  
  12.         DRI:                Craig Keithley
  13.  
  14.         Other Contact:        xxx put other contact here xxx
  15.  
  16.         Technology:            xxx put technology here xxx
  17.  
  18.     Writers:
  19.  
  20.         (CJK)    Craig Keithley
  21.  
  22.     Change History (most recent first):
  23.  
  24. */
  25.  
  26. #include <Types.h>
  27. #include <Devices.h>
  28. #include <DriverServices.h>
  29. #include <USB.h>
  30.  
  31.  
  32. #include "SampleDriver.h"
  33. #include "SampleDriverVersion.h"
  34.  
  35. extern    usbSamplePBStruct mySamplePB;
  36.  
  37. //------------------------------------------------------
  38. //
  39. //    This is the driver description structure that the expert looks for first.
  40. //  If it's here, the information within is used to match the driver
  41. //  to the device whose descriptor was passed to the expert.
  42. //    Information in this block is also used by the expert when an
  43. //  entry is created in the Name Registry.
  44. //
  45. //------------------------------------------------------
  46. USBDriverDescription    TheUSBDriverDescription = 
  47. {
  48.     // Signature info
  49.     kTheUSBDriverDescriptionSignature,
  50.     kInitialUSBDriverDescriptor,
  51.     
  52.     // Device Info
  53.     0x0547,                                    // vendor = Anchor
  54.     0x2001,                                    // product = not device specific
  55.     0,                                        // version of product = not device specific
  56.     0,                                        // protocol = not device specific
  57.     
  58.     // Interface Info    (* I don't think this would always be required...*)                
  59.     0,                                        // Configuration Value
  60.     0,                                        // Interface Number
  61.     0,                                        // Interface Class
  62.     0,                                         // Interface SubClass
  63.     0,                                        // Interface Protocol
  64.         
  65.     
  66.     // Driver Info
  67.     "\pUSBSampleDriver",                    // Driver name for Name Registry
  68.     0,                                        // Device Class  (from USBDeviceDefines.h)
  69.     0,                                        // Device Subclass 
  70.     kSampleHexMajorVers, 
  71.     kSampleHexMinorVers, 
  72.     kSampleCurrentRelease, 
  73.     kSampleReleaseStage,                    // version of driver  
  74.     
  75.     // Driver Loading Info
  76.     kUSBProtocolMustMatch+kUSBDoNotMatchInterface+kUSBDoNotMatchGenericDevice                    // Flags (currently undefined)
  77. };
  78.  
  79. USBClassDriverPluginDispatchTable TheClassDriverPluginDispatchTable =
  80. {
  81.     kClassDriverPluginVersion,                // Version of this structure
  82.     SampleDriverValidateHW,                    // Hardware Validation Procedure
  83.     SampleDeviceInitialize,                    // Initialization Procedure
  84.     SampleInterfaceInitialize,                // Interface Initialization Procedure
  85.     SampleDriverFinalize,                    // Finalization Procedure
  86.     SampleDriverNotifyProc,                    // Driver Notification Procedure
  87. };
  88.     
  89.  
  90. // Hardware Validation
  91. // Called upon load by Expert
  92. OSStatus SampleDriverValidateHW(USBDeviceRef device, USBDeviceDescriptor *desc)
  93. {
  94. #pragma unused (device)
  95. #pragma unused (desc)
  96.  
  97.     return (OSStatus)kUSBNoErr;
  98. }
  99.  
  100.  
  101. // Initialization function
  102. // Called upon load by Expert
  103. OSStatus     SampleDeviceInitialize (USBDeviceRef device, USBDeviceDescriptorPtr pDesc,  UInt32 busPowerAvailable)
  104. {
  105. #pragma unused (busPowerAvailable)
  106.  
  107.     //DebugStr("\pIn Anchor Driver");
  108.     DeviceInitialize(device, pDesc, busPowerAvailable);
  109.     return (OSStatus)kUSBNoErr;
  110. }
  111.  
  112.  
  113. // Interface Initialization Initialization function
  114. // Called upon load by Expert
  115. OSStatus     SampleInterfaceInitialize (UInt32 interfacenum, USBInterfaceDescriptorPtr pInterface, USBDeviceDescriptorPtr pDesc, USBDeviceRef device)
  116. {
  117. #pragma unused (interfacenum)
  118. #pragma unused (pInterface)
  119. #pragma unused (pDesc)
  120. #pragma unused (device)
  121.  
  122.     return (OSStatus)noErr;
  123. }
  124.  
  125. // Termination function
  126. // Called by Expert when driver is being shut down
  127. OSStatus SampleDriverFinalize(USBDeviceRef theDeviceRef, USBDeviceDescriptorPtr pDesc)
  128. {
  129. #pragma unused (pDesc)
  130. OSStatus myErr;
  131.  
  132.     USBExpertStatus(theDeviceRef, "\pUSBSampleDriver: Finalize", theDeviceRef);
  133.     
  134.     if (mySamplePB.pipeRef)
  135.     {
  136.         USBExpertStatus(theDeviceRef, "\pUSBSampleDriver: Aborting interrupt pipe", theDeviceRef);
  137.         USBAbortPipeByReference(mySamplePB.pipeRef);
  138.     }
  139.     
  140.     mySamplePB.pb.usbReference = theDeviceRef;
  141.     mySamplePB.pb.pbVersion = kUSBCurrentPBVersion;
  142.     mySamplePB.pb.usbFlags = 0;
  143.     mySamplePB.pb.usbRefcon = 0;             
  144.     mySamplePB.pb.usbCompletion = (USBCompletion)-1;
  145.     
  146.     myErr = USBDeallocMem(&mySamplePB.pb);
  147.     
  148.     return (OSStatus)noErr;
  149. }
  150.  
  151. OSStatus    SampleDriverNotifyProc(UInt32     notification, void *pointer, UInt32 refcon)
  152. {
  153. #pragma unused (pointer)
  154. #pragma unused (notification)
  155. #pragma unused (refcon)
  156.     return(kUSBNoErr);
  157. }
  158.  
  159. void DeviceInitialize(USBDeviceRef device, USBDeviceDescriptorPtr pDeviceDescriptor, UInt32 busPowerAvailable)
  160. {
  161. #pragma unused (pDeviceDescriptor)
  162. static Boolean beenThereDoneThat = false;
  163.  
  164.     USBExpertStatus(device, "\pIn Anchor Driver", 0);
  165.     if(beenThereDoneThat)
  166.     {
  167.         USBExpertFatalError(device, kUSBInternalErr, "\pAnchor driver is not reentrant!", 0);
  168.         return;
  169.     }
  170.     beenThereDoneThat = true;
  171.     
  172.     InitParamBlock(device, &mySamplePB.pb);
  173.     
  174.     mySamplePB.deviceRef = device;    
  175.  
  176.     mySamplePB.busPowerAvailable = busPowerAvailable;                            
  177.     mySamplePB.transDepth = 0;                            
  178.     mySamplePB.retryCount = kSampleRetryCount;
  179.     
  180.     mySamplePB.deviceRef = device;        
  181.     mySamplePB.interfaceRef = nil;        
  182.     mySamplePB.pipeRef = nil;        
  183.     
  184.     mySamplePB.pb.usbRefcon = kFindInterface;            
  185.     mySamplePB.pb.usbReference = device;
  186.     mySamplePB.pb.pbLength = sizeof(usbSamplePBStruct);
  187.  
  188.     InitParamBlock(device, &mySamplePB.pb);
  189.     InitiateTransactionProc(&mySamplePB.pb);
  190. }
  191.  
  192.